<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        border-radius: 10px;
        background: lightblue;
      }
      .active {
        background: red;
        color: gold;
      }
      .box span {
        font-size: 25px;
      }
      .city-box .header {
        display: flex;
      }
      .city-box .header .header-span {
        margin: 10px;
        padding: 10px;
        display: flex;
        justify-content: center;
        align-items: center;
        background: lightcoral;
        border-radius: 5px;
        color: #fff;
      }
      .city-box .header .active {
        background: red;
        color: gold;
      }
    </style>
  </head>
  <body>
    <!-- vue生效的代码区域 -->
    <div id="app">
      <div class="city-box">
        <header class="header">
          tabIndex: {{tabIndex}}
          <span
            class="header-span"
            v-bind:class="tabIndex === index ? 'active': ''"
            v-for="(item, index) in cityArr"
            @click="handleCityClick(index)"
          >
            {{index}} : {{item.provice}}
          </span>
        </header>
        <section class="content">
          <ul v-for="item in cityArr[tabIndex]?.children">
            <li>{{item.city}}</li>
          </ul>
        </section>
      </div>
    </div>
    <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> -->
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script src="./node_modules/mockjs/dist/mock.js"></script>
    <script>
      const data = Mock.mock({
        'list|10': [
          {
            id: '@id',
            provice: '@province()',
            'children|5': [
              {
                id: '@id()',
                city: '@city()',
              },
            ],
          },
        ],
      })

      function createData() {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            resolve(data.list)
          }, 1000)
        })
      }

      // 1. 简洁的模板语法来声明式地将数据渲染进 DOM 的系统：{{}} 模版
      // 2. vue所有的数据，必须定义在data中或者vue指定的其他区域
      // 3. 通过改变数据，来实现效果的改变 （数据驱动dom）
      // 4. mvvm ->
      const app = new Vue({
        el: '#app', // 挂载让vue生效的元素
        data: {
          cityArr: [], // 初始化数据 data 一般使用静态数据
          tabIndex: 0,
        },
        // 1. 生命周期 处理好数据，然后给了data
        created() {
          createData().then((res) => {
            console.log('res:', res)
            this.cityArr = res
          })
        },
        methods: {
          handleCityClick(index) {
            this.tabIndex = index
          },
        },
      })

      // 响应式效果 借助了一个设计模式： MVVM
      // M-model 数据模型
      // v-view  视图模型
      // vm -> view-model 处理视图和数据的一个中介

      /*
      get title: ƒ reactiveGetter()
      set title: ƒ reactiveSetter(newVal)
        正是因为这个数据上面，经过data加工之后，添加了 两个属性，get/set 所以，这个数据就能变成了一个
      响应式数据，
      1. 前提，必须定义在data中
      */

      // console.log('data:', data.list)
      // const obj = {
      //   title: '我是标题',
      // }
      // console.log('obj非响应式数据：', obj)

      // console.log(app, 'app')
    </script>
  </body>
</html>
